const { v4: uuidv4 } = require("uuid");
const crypto = require("crypto");
const jwt = require("jsonwebtoken");
module.exports = {
  /**
   * 创建一个 uuid
   * @returns
   */
  genUUID() {
    return uuidv4();
  },
  /**
   * 密码加密辅助函数
   * @param {string} raw_password 要加密的原始密码
   */
  passwordEncoder(raw_password) {
    return crypto
      .createHmac("sha256", this.config.keys)
      .update(raw_password)
      .digest("hex");
  },
  /**
   * 生成 jwt 令牌的辅助函数
   * @param {object} user 需要保存到 token 中的用户信息
   */
  genToken(user) {
    return jwt.sign(user, this.app.config.keys, { expiresIn: "2h" });
  },
  /**
   * 校验 token 的合法性
   * @param {string} token 服务器生成的 token 令牌
   */
  checkToken(token) {
    return jwt.verify(token, this.app.config.keys);
  },
  /**
   * 将日期格式化为：yyyy-mm-dd 格式
   * @param {Date} date 要格式化的日期
   */
  dateFormat(date) {
    if (date instanceof Date) {
      // 年
      let y = date.getFullYear();
      // 月
      let m = String(date.getMonth() + 1).padStart(2, "0");
      // 日
      let d = String(date.getDate()).padStart(2, "0");
      return `${y}-${m}-${d}`;
    }
  },
  /**
   * 汉字获取拼音
   * @param {string} name 用户姓名
   */
  getCharFromChinese(name) {
    const pyArr = pinyin(name, {
      style: pinyin.STYLE_NORMAL, // 不带声调
    });
    return pyArr
      .map((item) => item[0].replace(/^\S/, (s) => s.toUpperCase()))
      .join("");
  },
};
